#pragma once
#ifndef AGAMMA_H
#define AGAMMA_H  
#include "Particle.h"
#include "TSystem.h"
#include "src/Class/debug.h"
#include "src/Class/Gamma.h"
#include "src/Analyse/ABTag.h"
#include "src/Class/DrawClass.h"
#include "src/Analyse/Ajet_function.h"
#include "src/Analyse/Ajep.h"
#include "src/AnalyseClass/Pool.h"
#include "src/fastjet/PseudoGamma.hh"




class AGamma{
	private:
		int                             _num_jets        ;

		APool                           _jets_pool       ;

/*****************************************************************************************
 * private function
 **********************************************************************i******************/

	public:

		AGamma();

		~AGamma();

		void Clear();

		void Init();

/*****************************************************************************************
 * output function
 **********************************************************************i******************/
		int Num_Gammas();


		APool Gamma_Pool();

		bool Has_Gamma();

		void Set_Has_Gamma();

		void Clear_Has_Gamma();


/*****************************************************************************************
 *  character   
 **********************************************************************i******************/

		std::vector<float>       Px();
		std::vector<float>       Py();
		std::vector<float>       Pz();
		std::vector<float>       E();
		std::vector<float>       Pt();
		std::vector<float>       Mass();
		std::vector<float>       CosTheta();
		std::vector<float>       Rap();
		std::vector<float>       PID();


/*****************************************************************************************
 * normal function 
 **********************************************************************i******************/

		void Set_Gamma(CDraw &para,  AParticleType &in, AParticleType &_input_bquark, AParticleType &_input_cquark);

		bool Cut(AParticle* par, CGamma_cut &cut);

		void Set_Gammas_Pool   (AParticleType &in_events,  CGamma_cut &para_jet);

	    void Find_All_Best_Gamma(CCombine &para_comb);

		bool Set_Cut(AParticle* par, CLepton_cut &lep_cut);
};


/*****************************************************************************************
 *  print 
 **********************************************************************i******************/
std::ostream & operator<<(std::ostream & ostr, AGamma& jet);
std::ostream & operator<<(std::ostream & ostr, AGamma* jet);


#endif
